Async Client এবং Server তৈরি করা

Web Development - অ্যাপাচি সিএক্সএফ (Apache CXF) - Asynchronous Web Services (অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসেস) |

Asynchronous (Async) ক্লায়েন্ট এবং সার্ভার ওয়েব সার্ভিসের পারফরম্যান্স উন্নত করার একটি অত্যন্ত কার্যকরী পদ্ধতি। এটি সার্ভিস কলের জন্য অপেক্ষা করার সময় ব্যবহারকারীর অ্যাপ্লিকেশনকে ব্লক না করে, বরং পেছনে প্রসেসিং চালিয়ে যাওয়ার সুযোগ প্রদান করে। Apache CXF এই ধরনের অ্যাসিঙ্ক্রোনাস কমিউনিকেশন সমর্থন করে, যা ওয়েব সার্ভিসের রেসপন্স টাইম কমাতে সহায়ক।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Apache CXF ব্যবহার করে Async Client এবং Async Server তৈরি করা যায়।


1. Asynchronous Server তৈরি করা

Asynchronous Web Service server তৈরি করার জন্য, আমরা @WebService অ্যানোটেশন ব্যবহার করব এবং AsyncHandler ইন্টারফেস প্রয়োগ করব। এর মাধ্যমে সার্ভিস কলগুলো অবিলম্বে প্রসেস হতে শুরু করবে এবং ক্লায়েন্টকে ব্লক করা হবে না।

1.1 Async Web Service Endpoint তৈরি

এখানে একটি ওয়েব সার্ভিস এর উদাহরণ দেওয়া হল, যেখানে @WebService অ্যানোটেশন ব্যবহার করা হয়েছে এবং AsyncHandler ইন্টারফেস প্রয়োগ করা হয়েছে:

import javax.jws.WebService;
import org.apache.cxf.async.AsyncHandler;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;

@WebService
public class HelloWorldAsyncImpl {

    public String sayHello(String name) {
        // সাধারণ ওয়েব সার্ভিস মেথড
        return "Hello, " + name;
    }

    public void asyncHello(String name, AsyncHandler<String> asyncHandler) {
        // অ্যাসিঙ্ক্রোনাস মেথড
        String response = "Hello, " + name;
        asyncHandler.handleResponse(new AsyncResponse<>(response));  // Response কে অ্যাসিঙ্ক্রোনাসভাবে প্রেরণ করা হচ্ছে
    }
}

1.2 Server এর জন্য Configurations

Apache CXF এ সার্ভার কনফিগার করার জন্য JaxWsServerFactoryBean ব্যবহার করা হয়। অ্যাসিঙ্ক্রোনাস সার্ভিস সেটআপের জন্য নিচের মতো কনফিগারেশন করা যেতে পারে:

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class HelloWorldServer {

    public static void main(String[] args) {
        HelloWorldAsyncImpl implementor = new HelloWorldAsyncImpl();
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        
        factory.setServiceClass(HelloWorldAsyncImpl.class);
        factory.setAddress("http://localhost:8080/hello");
        factory.create();
    }
}

এখানে, JaxWsServerFactoryBean ব্যবহার করে ওয়েব সার্ভিসের জন্য অ্যাসিঙ্ক্রোনাস কল সক্ষম করা হয়েছে এবং setAddress এর মাধ্যমে ওয়েব সার্ভিসের URL কনফিগার করা হয়েছে।


2. Asynchronous Client তৈরি করা

অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের জন্য, আমরা Client ইন্টারফেসের মাধ্যমে ওয়েব সার্ভিসের সাথে যোগাযোগ করব, তবে ওয়েব সার্ভিস কল হবে অ্যাসিঙ্ক্রোনাস। Apache CXF অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের জন্য AsyncResponseCallback ইন্টারফেস ব্যবহার করে, যা কলের পর রেসপন্স পাওয়ার পর কার্যকলাপ সম্পন্ন করে।

2.1 Async Client Code Example

এখানে একটি অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের উদাহরণ দেওয়া হলো:

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.async.AsyncResponseCallback;
import org.apache.cxf.message.Message;

public class HelloWorldAsyncClient {

    public static void main(String[] args) {
        // ক্লায়েন্ট তৈরি করা
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(HelloWorldAsyncImpl.class);
        factory.setAddress("http://localhost:8080/hello");
        HelloWorldAsyncImpl helloWorld = (HelloWorldAsyncImpl) factory.create();

        // অ্যাসিঙ্ক্রোনাস কলের জন্য কলব্যাক পদ্ধতি সেট করা
        helloWorld.asyncHello("John", new AsyncResponseCallback() {
            @Override
            public void handleResponse(Message message) {
                String response = (String) message.getContent(String.class);
                System.out.println("Async Response: " + response);  // অ্যাসিঙ্ক্রোনাস রেসপন্স প্রদর্শন করা
            }

            @Override
            public void handleFault(Message message) {
                System.out.println("Async Fault: " + message);
            }
        });
    }
}

এখানে AsyncResponseCallback ব্যবহার করে ক্লায়েন্টে অ্যাসিঙ্ক্রোনাস রেসপন্স হ্যান্ডলিং করা হয়েছে। ওয়েব সার্ভিসের রেসপন্স পাওয়ার পর handleResponse মেথড কল হবে, যেখানে আমরা রেসপন্স প্রিন্ট করতে পারব। যদি কোনো ত্রুটি ঘটে, তবে handleFault মেথড কল হবে।


3. Configuring Asynchronous Client using CXF Client API

Apache CXF এ অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট কনফিগার করতে নিম্নলিখিত কনফিগারেশন করা যেতে পারে:

<bean id="asyncHelloWorldClient" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="com.example.HelloWorldAsyncImpl"/>
    <property name="address" value="http://localhost:8080/hello"/>
</bean>

এই কনফিগারেশন JaxWsProxyFactoryBean দিয়ে তৈরি করে ক্লায়েন্ট সার্ভিসের সাথে অ্যাসিঙ্ক্রোনাসভাবে যোগাযোগ করবে। এখানে, সার্ভিস ক্লাসের এবং ওয়েব সার্ভিসের URL নির্দিষ্ট করা হয়েছে।


4. Advantages of Asynchronous Communication in Apache CXF

  • Non-blocking Behavior: অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট এবং সার্ভার কলের মাধ্যমে অ্যাপ্লিকেশন ব্লক না হয়ে অব্যাহতভাবে কাজ করতে পারে।
  • Improved Performance: সার্ভিসের রেসপন্স টাইম দ্রুত হয়, কারণ সার্ভিস কল হওয়ার পর অপেক্ষা করা হয় না।
  • Scalability: একাধিক অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট সমান্তরালভাবে প্রক্রিয়াকৃত হতে পারে, যা সার্ভিসের স্কেলেবিলিটি উন্নত করে।
  • Efficient Resource Usage: ওয়েব সার্ভিস সার্ভার এবং ক্লায়েন্টের রিসোর্সের ব্যবহার কমে যায়, কারণ অ্যাসিঙ্ক্রোনাস কলের মাধ্যমে সময় নষ্ট হয় না।

উপসংহার

Apache CXF এর মাধ্যমে অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট এবং সার্ভার তৈরি করার প্রক্রিয়া তুলনামূলকভাবে সহজ। এটি ওয়েব সার্ভিসের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সহায়তা করে, বিশেষ করে যখন ওয়েব সার্ভিসটি অনেকগুলো রিকোয়েস্ট একসাথে প্রক্রিয়া করতে সক্ষম হয়।

Content added By
Promotion